"<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png\" />\n <link\n rel=\"icon\"\n href=\"data:image/svg+xml;utf8,\n <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 135.5 135.5'>\n <path\n d='M129.7 132.6V174h-23.1v-72.8h22v13.4h.8q2.4-6.7 8.2-10.5 5.9-3.8 14-3.8 7.6 0 13.2 3.4 5.7 3.5 8.8 9.6 3.2 6.1 3.2 14.3V174h-23.2v-41.8q0-6.1-3-9.5-3.2-3.4-8.7-3.4-3.6 0-6.4 1.6-2.7 1.6-4.3 4.5-1.4 3-1.5 7zm-84.7 0V174H22V77h22.4v37.6h.8q2.4-6.7 8-10.5 5.7-3.8 13.8-3.8 7.7 0 13.4 3.4 5.6 3.4 8.8 9.5 3.1 6.2 3 14.4V174h-23v-41.8q0-6.1-3.1-9.5-3-3.4-8.7-3.4-3.6 0-6.4 1.6-2.7 1.6-4.3 4.5-1.5 3-1.6 7z'\n aria-label='hn'\n transform='translate(-1 -19.2) scale(.69186)'\n />\n </svg>\n \"\n />\n <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg\" color=\"#000000\" />\n <meta name=\"msapplication-TileColor\" content=\"#ffffff\" />\n <meta name=\"theme-color\" content=\"#ffffff\" />\n <title>hndex.org</title>\n <style>\n :root {\n --tx: #000000;\n --bg: #ffffff;\n --lk-1: #0070f3;\n --lk-2: #0366d6;\n --ac: #79ffe1;\n --svg-inv: 0;\n }\n @media (prefers-color-scheme: dark) {\n :root {\n --tx: #ffffff;\n --bg: #000000;\n --lk-1: #3291ff;\n --lk-2: #0070f3;\n --ac: #7928ca;\n --svg-inv: 1;\n }\n }\n\n html {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto,\n Oxygen, Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\", sans-serif;\n background: var(--bg);\n color: var(--tx);\n max-width: 500px;\n padding: 10px;\n margin: 0 auto;\n }\n\n ::selection {\n background: var(--ac);\n color: var(--tx);\n }\n\n a {\n color: var(--lk-1);\n }\n a:hover {\n color: var(--lk-2);\n }\n\n h3,\n h5 {\n text-align: center;\n margin: 0 auto 0 auto;\n }\n\n body {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n svg {\n margin: 1rem auto 1rem auto;\n max-width: 200px;\n filter: invert(var(--svg-inv));\n }\n\n .redirect {\n font-weight: 300;\n text-align: center;\n margin: 0 auto 0 auto;\n }\n\n .no-wrap {\n white-space: nowrap;\n word-break: keep-all;\n }\n\n .hn {\n font-weight: 700;\n }\n .dex {\n font-weight: 300;\n }\n </style>\n </head>\n <body>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352.1 98.5\">\n <path\n d=\"m327.6 100.6 21.4 33.6 21.4-33.6h3.6l-23.2 36.3 23.2 36.4h-3.6L349 139.7l-21.4 33.6H324l23.2-36.4-23.2-36.3zM288 174.8q-9.5 0-16.7-5-7.1-5-11-13.4-4-8.6-4-19.3 0-10.7 4-19.2t10.8-13.5q6.8-5 15.4-5 6.3 0 11.7 2.7 5.4 2.7 9.5 7.5 4 4.8 6.2 11 2.3 6.3 2.3 13.3v3h-58.3v-3h55.3q0-8.7-3.6-15.8-3.6-7.2-9.7-11.4-6-4.2-13.4-4.2-7.5 0-13.6 4.4-6 4.5-9.7 12.1-3.6 7.7-3.8 17.4v.4q0 9.5 3.3 17.5t9.7 12.7q6.4 4.8 15.6 4.8 6.7 0 11.2-2.4 4.6-2.3 7.4-5.4 2.8-3.1 4.1-5.3l2.5 1.7q-1.7 2.8-4.9 6.1-3.2 3.4-8.2 5.9-5 2.4-12.1 2.4zm-76.2 0q-8.6 0-15-4.9-6.2-5-9.6-13.5-3.5-8.5-3.5-19.3 0-10.7 3.5-19.2t9.8-13.5q6.3-5 14.8-5 5.8 0 10.6 2.5 5 2.3 8.5 6.8 3.6 4.4 5.5 10.4h.4V76.3h3v97h-3v-18.2h-.4q-2 6-5.5 10.5-3.6 4.4-8.5 6.8-4.8 2.4-10.6 2.4zm0-3q7.7 0 13.3-4.6 5.6-4.5 8.6-12.4 3-7.8 3-17.7 0-9.8-3-17.6-3-7.9-8.7-12.4-5.6-4.6-13.2-4.6-7.7 0-13.3 4.6-5.6 4.5-8.7 12.4-3 7.8-3 17.6 0 9.9 3 17.7 3 7.9 8.6 12.4 5.7 4.6 13.4 4.6zm-82-39.2V174h-23.2v-72.8h22v13.4h.8q2.4-6.7 8.2-10.5 5.9-3.8 14-3.8 7.6 0 13.2 3.4 5.7 3.5 8.8 9.6 3.2 6.1 3.2 14.3V174h-23.2v-41.8q0-6.1-3-9.5-3.2-3.4-8.7-3.4-3.6 0-6.4 1.6-2.7 1.6-4.3 4.5-1.4 3-1.5 7zm-84.8 0V174H22V77h22.4v37.6h.8q2.4-6.7 8-10.5 5.7-3.8 13.8-3.8 7.7 0 13.4 3.4 5.6 3.4 8.8 9.5 3.1 6.2 3 14.4V174h-23v-41.8q0-6.1-3.1-9.5-3-3.4-8.7-3.4-3.6 0-6.4 1.6-2.7 1.6-4.3 4.5-1.5 3-1.6 7z\"\n aria-label=\"hndex\"\n transform=\"translate(-21.9 -76.3)\"\n />\n </svg>\n\n <main>\n <h3>Goodbye, for now.</h3>\n <h5>Thanks for the fun!</h5>\n <p>\n <span class=\"hn\">hn</span><span class=\"dex\">dex</span> was a site to\n search the full-text of articles submitted to\n <a href=\"https://news.ycombinator.com\">Hacker News</a>. It served as my\n test bed to play around with data structures and algorithms related to\n inverted indexes. I explored the problem through the lens of linear\n algebra and found some interesting ways to compress its sparse boolean\n matrices. The site used no JavaScript and aimed to serve a page of\n search results in under 100 μs on a $10/mo VPS.\n </p>\n <p>\n I'm retiring this project. I don't actually know if anyone is here (no\n logging <code>¯\\_(ツ)_/¯</code>). It's been a fun hobby and a great\n learning experience. Perhaps someday I'll write up a retrospective and\n share its story. Reach out via\n <a href=\"/cdn-cgi/l/email-protection#036b6d67667b43686a746a796a776a2d606c6e\">email</a> or connect with\n <a href=\"https://github.com/mcovalt\">me on GitHub</a> to get in touch.\n </p>\n </main>\n <div class=\"redirect\">\n Coming from a URL ending with a number?\n <br />\n <small>\n <a class=\"no-wrap\" href=\"https://hndex.org/24079592\"\n >hndex.org/<b>24079592</b></a\n >\n <span class=\"no-wrap\"\n >→\n <a href=\"https://news.ycombinator.com/item?id=24079592\"\n >news.ycombinator.com/item?id=<b>24079592</b></a\n ></span\n >\n </small>\n </div>\n <script data-cfasync=\"false\" src=\"/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js\"></script></body>\n</html>\n"